Работа табличного поля с динамическими списками

Особенности работы полосы прокрутки

Табличное поле может отображать два типа данных: динамические списки и статические данные. Особенностью динамических списков является использование при обращении к базе данных механизма динамической выборки, при которой данные считываются не полностью, а блоками. Особенностью статических данных является хранение в памяти всех данных. Примерами динамических списков являются списки справочников, документов, регистров, а примерами статических данных - таблица значений, дерево значений, табличная часть, наборы записей.

При отображении динамических списков табличное поле особым образом отображает полосу прокрутки - в ней бегунок отображается только в трех положениях: вверху, в центре и внизу, и имеет постоянный размер. Такое поведение связано с тем, что табличное поле для уменьшения объема выбираемых данных загружает из базы данных только часть списка, причем, считывание может происходить начиная с любой записи, в том числе и из середины списка. Тем самым табличное поле содержит только видимую часть списка и, следовательно, не имеет информации об положении строки в списке и количестве строк в списке. Поэтому бегунок не отражает положение видимой части списка и используется только для перемещения в начало и конец списка, а также к текущей строке списка. Также положение бегунка указывает на достижение начала или конца списка, это происходит если пользователь попытался выйти за границы списка.

Множественное выделение строк

При выделении группы строк в табличном поле (например, при нажатии Shift+Home или Shift+End) выделяются только первая и последняя строка спискаТакое поведение характерно для табличных полей, отображающих динамические списки. Как уже было сказано выше, табличное поле при работе с динамическими списками оперирует только видимой частью списка и не имеет информации о положении строки в списке. Следовательно, при выборе группы записей, невозможно однозначно определить, какая из выбранных строк является первой, а какая последней. Следовательно, невозможно определить направление выделения строк, что не позволяет быстро определить диапазон строк.  

Поэтому при множественном выделении в динамических списках выполняется выделение только отдельных строк и выделение соседних строк при движении вверх и вниз, но не выполняется выделение диапазонов строк.

Особенности использования свойств ТекущиеДанные и ТекущаяСтрока

Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока. Отличие между этими свойствами состоит в том, что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля, а свойство ТекущаяСтрока содержит значение, идентифицирующее строку. Следует отметить, что свойство ТекущиеДанные содержит  коллекцию значений текущей строки, соответствующую коллекции колонок отображаемого динамического списка, при этом если нужного поля нет в текущих данных, то его можно добавить в коллекцию полей списка используя метод "Добавить" коллекции колонок списка.

Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.

Следует заметить, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.

Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока. В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля. Например, приведенный ниже фрагмент текста программы является неэффективным:

Копировать в буфер обмена
Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
Сообщить("Цена = " + ЭлементыФормы.СправочникСписок.ТекущаяСтрока.Цена);
КонецПроцедуры 

Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные. 
Правильный фрагмент приведен ниже:

Копировать в буфер обмена
Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
Cообщить("Цена = " + ЭлементыФормы.СправочникСписок.ТекущиеДанные.Цена);
КонецПроцедуры 

Особенности работы в режиме отображения дерева

В режиме отображения дерева табличное поле, отображающее динамические списки, особым образом отображает кнопки раскрытия узлов. Используется два цвета отображения кнопки: черный и серый. Если при попытке открытия узла дерева было обнаружено, что дочерних узлов нет, то кнопка рисуется серым цветом, иначе - черным. Такое поведение обусловлено тем, что определение наличия подчиненных узлов требует дополнительных ресурсов и при считывании данных не происходит. Поэтому для удобства пользователя узлы, у которых не было обнаружено дочерних узлов, запоминаются табличным полем. Также стоит отметить, что цвет кнопки никак не влияет на последующее раскрытие узлов дерева.